package com.yifan.linear.Linkedlist;

/**
 * @Author YIFan
 * @Date 2020/6/7 15:49
 * @Version 1.0
 */
// 单向链表
public class Node {

    // 节点内容
    private int data;
    // 下一个节点
    private Node next;

    public Node(int data) {
        this.data = data;
    }

    // 追加节点
    public Node apped(Node node){
        // 获取当前节点
        Node currentNode = this ;
        // 循环向后找
        while (true){
            // 取出下一个节点
            Node nextNode = currentNode.next;
            // 下一个节点为 null 当前节点是最后一个节点了
            if(nextNode == null){
                break;
            }
            // 下一个节点赋值给当前节点
            currentNode = nextNode;
        }
        // 把需要追加的节点 追加为 找到当前节点的下一个节点
        currentNode.next = node ;

        return this;
    }

    // 获取下一个节点
    public Node next(){
        return this.next;
    }

    // 获取节点中的数据
    public int getData() {
       return this.data;
    }

    // 判断节点是否为最后一个节点
    public boolean isLast(){
        return next == null;
    }

    // 显示节点
    public void show(){
        Node currentNode = this;
        while (true){
            System.err.print(currentNode.getData()+" -> ");
            currentNode = currentNode.next;
            if(currentNode == null ){
                System.err.print("null ");
                break;
            }
        }
        System.err.println();
    }

    // 删除当前节点的下一个节点
    public void removeNext(){
        // 只能删除当前节点的下一个节点 获取到删除的下一个节点
        Node node = next.next ;
        // 把下下一个节点设置为当前节点的下一个节点
        this.next = node;
    }

    // 插入一个节点
    public void afterNode(Node node){
        // 取出当前节点的下一个节点 作为  下下一个节点
        Node nextNext = this.next;
        // 把插入的节点 赋值给当前节点的下一个节点
        this.next = node;
        //把下下个节点设置为新节点的下一个节点
        node.next = nextNext;
    }
}
